#include <iostream>
#include <string.h>
using namespace std;
#define SIZE 1005
int a[SIZE][2];
int dp(int i, int t) {
  if (t < 0)
    return -1;
  if (i == 0)
    return a[0][0];
  return max(dp(i - 1, t - a[i][0]) + a[i][1], dp(i - 1, t));
}

int main(void) {

  int t, m;
  int dp[105][SIZE];
  cin >> t >> m;
  memset(a, 0, sizeof(a));
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i < t; i++) {
    cin >> a[i][0] >> a[i][1];
  }
  for (int i = t; i > 0; i--) {
    for (int j = 0;)
  }
  cout << dp(t, m);
  return 0;
}